//package com.zhz.mall.common.log.core;
//
//import cn.hutool.extra.spring.SpringUtil;
//import org.apache.logging.log4j.Level;
//import org.apache.logging.log4j.Marker;
//import org.apache.logging.log4j.core.LogEvent;
//import org.apache.logging.log4j.core.config.Property;
//import org.apache.logging.log4j.core.impl.DefaultLogEventFactory;
//import org.apache.logging.log4j.message.Message;
//import org.springframework.context.ApplicationContext;
//
//import java.util.List;
//import java.util.Objects;
//
///**
// * ListenableLogEventFactory
// * <p>
// * 在生成日志前, 发布日志创建事件, 其他消费者可监听此事件进行处理
// *
// * @author zhouhengzhe
// * @see org.apache.logging.log4j.core.config.LoggerConfig
// * @see DefaultLogEventFactory
// */
//public class ListenableLogEventFactory extends DefaultLogEventFactory {
//
//
//    @Override
//    public LogEvent createEvent(String loggerName, Marker marker, String fqcn, Level level, Message data, List<Property> properties, Throwable t) {
//        LogInfo logInfo = LogInfo.builder()
//                .loggerName(loggerName)
//                .marker(marker)
//                .fqcn(fqcn)
//                .level(level)
//                .data(data)
//                .properties(properties)
//                .t(t)
//                .build();
//
//        onLog(logInfo);
//
//        return super.createEvent(logInfo.getLoggerName(), logInfo.getMarker(), logInfo.getFqcn(),
//                logInfo.getLevel(), logInfo.getData(), logInfo.getProperties(), logInfo.getT());
//    }
//
//
//    @Override
//    public LogEvent createEvent(String loggerName, Marker marker, String fqcn, StackTraceElement location, Level level, Message data, List<Property> properties, Throwable t) {
//        LogInfo logInfo = LogInfo.builder()
//                .loggerName(loggerName)
//                .marker(marker)
//                .fqcn(fqcn)
//                .location(location)
//                .level(level)
//                .data(data)
//                .properties(properties)
//                .t(t)
//                .build();
//
//        onLog(logInfo);
//
//        return super.createEvent(logInfo.getLoggerName(), logInfo.getMarker(), logInfo.getFqcn(), logInfo.getLocation(),
//                logInfo.getLevel(), logInfo.getData(), logInfo.getProperties(), logInfo.getT());
//    }
//
//
//    private void onLog(LogInfo logInfo) {
//        ApplicationContext context = SpringUtil.getApplicationContext();
//        if (Objects.nonNull(context)) {
//            context.publishEvent(new LogInfoCreateEvent(logInfo));
//        }
//    }
//
//
//
//}
